<?php 

/**
 * Método inicializa o formulário de cadastro de alunos,
 * sendo necessário cursos e campus já cadastrados no banco de dados para o devido preenchimento.
 */
function alunos_form($form, &$form_state, $alunos) {
	// Carrega os cursos do Banco.
	$cursos = array();
	foreach (cursos_load_all() as $curso) {
		$cursos[$curso->id] = t("@id : @nome ", array('@id' => $curso->id, '@nome' => $curso->nome));
	}

	// Carrega os Estados possiveis do aluno no Banco.
	$estados = array();
	foreach (estados_load_all() as $estado) {
		$cursos[$estado->id] = t("@id : @nome ", array('@id' => $estado->id, '@nome' => $estado->nome));
	}

	// Carrega os campi do Banco.
	$campi = array();
	foreach (campus_load_all() as $campus) {
		$campi[$campus->id] = t("@id : @nome ", array('@id' => $campus->id, '@nome' => $campus->nome));
	}

	$form['alunos'] = array(
			'#type' => 'value',
			'#value' => $alunos,
	);
	$form['dados_pessoais'] = array(
			'#type' => 'fieldset',
			'#title' => t('Dados Pessoais'),
	);
	$form['dados_estudante'] = array(
			'#type' => 'fieldset',
			'#title' => t('Dados de Estudante'),
	);
	$form['dados_pessoais']['nome'] = array(
			'#type' => 'textfield',
			'#required' => TRUE,
			'#title' => t('Nome'),
	);
	$form['dados_pessoais']['cpf'] = array(
			'#type' => 'textfield',
			'#required' => TRUE,
			'#size' => 11,
			'#maxlength' => 11,
			'#title' => t('CPF'),
	);
	$form['dados_estudante']['curso'] = array(
			'#type' => 'select',
			'#title' => t('Curso'),
			'#options' => $cursos,
			'#required' => TRUE,
	);
	$form['dados_estudante']['estado'] = array(
			'#type' => 'select',
			'#title' => t('Estado'),
			'#options' => $estados,
			'#required' => TRUE,
	);
	$form['dados_pessoais']['CEP'] = array(
			'#type' => 'textfield',
			'#title' => t('CEP'),
			'#size' => 8,
			'#maxlength' => 8,
			'#required' => TRUE,
	);
	$form['dados_pessoais']['endereco'] = array(
			'#type' => 'textfield',
			'#title' => t('Endereço'),
			'#required' => TRUE,
	);
	$form['dados_estudante']['campus'] = array(
			'#type' => 'select',
			'#title' => t('Campus'),
			'#options' => $campi,
			'#required' => TRUE,
	);
	$form['dados_pessoais']['telefone'] = array(
			'#type' => 'textfield',
			'#title' => t('Telefone'),
			'#size' => 13,
			'#maxlength' => 13,
			'#description' => '(00)0000-0000',
			'#required' => TRUE,
	);

	field_attach_form('alunos', $alunos, $form, $form_state);
	$form['submit'] = array(
			'#type' => 'submit',
			'#value' => t('Cadastrar'),
	);
	return $form;
}

/**
 * Método que valida os dados fornecidos nos campos do formulário de cadastro de alunos.
 */
function alunos_form_validate($form, &$form_state) {
	$alunos_submisttion = $form_state['values']['alunos'];
	if(!preg_match("^(\d{3}.\d{3}.\d{3}-\d{2})|(\d{11})$^",$form_state['values']['cpf']))
		form_set_error('cpf','CPF inválido');
	if(!preg_match("^\(\d{2}\)\d{4}-\d{4}$^",$form_state['values']['telefone']))
		form_set_error('telefone','Telefone inválido');
	field_attach_form_validate('alunos', $alunos_submisttion, $form, $form_state);
	field_attach_form_validate('alunos', $alunos_submisttion, $form, $form_state);
}

/**
 * Método que define uma instância da entidade alunos preenchendo com os valores dos campos
 * do formulário de cadastro e submete para o banco de dados.
 */
function alunos_form_submit($form, &$form_state) {
	$alunos = $form_state['values']['alunos'];
	$alunos->cpf = $form_state['values']['cpf'];
	$alunos->nome = $form_state['values']['nome'];
	$alunos->campus = $form_state['values']['campus'];
	$alunos->curso=$form_state['values']['curso'];
	$alunos->cep= $form_state['values']['CEP'];
	$alunos->estado= $form_state['values']['estado'];
	$alunos->endereco = $form_state['values']['endereco'];
	$alunos->telefone = $form_state['values']['telefone'];
	field_attach_submit('alunos', $alunos, $form, $form_state);
	$alunos = alunos_save($alunos);
	$form_state['redirect'] = "alunos/".$alunos->id;
}

/**
 * Método inicializa o formulário de busca de alunos para atualização ou visualização,
 * sendo necessário alunos já cadastrados no banco de dados para obter retorno.
 */
function alunos_form_pesquisar($form, &$form_state) {
	$form['procurar'] = array(
			'#type' => 'textfield',
			'#autocomplete_path' => 'alunos/listar',
			'#required' => TRUE,
			'#description'=>'Digite o nome do aluno ou CPF',
	);
	$form['search'] = array(
			'#type' => 'submit',
			'#value' => t('Search'),
	);
	return $form;
}
/**
 * Método que valida os dados fornecidos nos campos do formulário de pesquisa de alunos
 * e redireciona para o devido resultado.
 */
function alunos_form_pesquisar_validate($form, &$form_state) {
	$search = $form_state['values']['procurar'];
	$entries = alunos_load_multiple();
	foreach ($entries as $entry) {
		if($search==$entry->cpf || $search==$entry->nome){
			drupal_goto('alunos/'.$entry->id);
		}
	}
}

/**
 * Método inicializa o formulário de edição de alunos para atualização,
 * sendo necessário alunos já cadastrados no banco de dados para obter retorno.
 */
function alunos_edit_form($form, &$form_state, $alunos) {
	// Carrega os cursos do Banco.
	$cursos = array();
	foreach (cursos_load_all() as $curso) {
		$cursos[$curso->id] = t("@id : @nome ", array('@id' => $curso->id, '@nome' => $curso->nome));
	}

	// Carrega os Estados possiveis do aluno no Banco.
	$estados = array();
	foreach (estados_load_all() as $estado) {
		$cursos[$estado->id] = t("@id : @nome ", array('@id' => $estado->id, '@nome' => $estado->nome));
	}


	// Carrega os campi do Banco.
	$campi = array();
	foreach (campus_load_all() as $campus) {
		$campi[$campus->id] = t("@id : @nome ", array('@id' => $campus->id, '@nome' => $campus->nome));
	}

	$form['alunos'] = array(
			'#type' => 'value',
			'#value' => $alunos,
	);
	$form['dados_pessoais'] = array(
			'#type' => 'fieldset',
			'#title' => t('Dados Pessoais'),
	);
	$form['dados_estudante'] = array(
			'#type' => 'fieldset',
			'#title' => t('Dados de Estudante'),
	);
	$form['dados_pessoais']['nome'] = array(
			'#type' => 'textfield',
			'#required' => TRUE,
			'#title' => t('Nome'),
			'#default_value' => $alunos->nome,
	);
	$form['dados_pessoais']['cpf'] = array(
			'#type' => 'textfield',
			'#required' => TRUE,
			'#size' => 11,
			'#maxlength' => 11,
			'#title' => t('CPF'),
			'#default_value' => $alunos->cpf,
	);
	$form['dados_estudante']['curso'] = array(
			'#type' => 'select',
			'#title' => t('Curso'),
			'#options' => $cursos,
			'#required' => TRUE,
			'#default_value' => $alunos->curso,
	);
	$form['dados_estudante']['estado'] = array(
			'#type' => 'select',
			'#title' => t('Estado'),
			'#options' => array('regular'=>'Regular',
					'espera'=>'Em espera',
					'residente'=>'Residente'),
			'#required' => TRUE,
			'#default_value' =>$alunos->estado,
	);
	$form['dados_pessoais']['CEP'] = array(
			'#type' => 'textfield',
			'#title' => t('CEP'),
			'#size' => 8,
			'#maxlength' => 8,
			'#required' => TRUE,
			'#default_value' => $alunos->cep,
	);
	$form['dados_pessoais']['endereco'] = array(
			'#type' => 'textfield',
			'#title' => t('Endereço'),
			'#required' => TRUE,
			'#default_value' => $alunos->endereco,
	);
	$form['dados_estudante']['campus'] = array(
			'#type' => 'select',
			'#title' => t('Campus'),
			'#options' => $campi,
			'#required' => TRUE,
			'#default_value' => $alunos->campus,
	);
	$form['dados_pessoais']['telefone'] = array(
			'#type' => 'textfield',
			'#title' => t('Telefone'),
			'#size' => 13,
			'#maxlength' => 13,
			'#description' => '(00)0000-0000',
			'#required' => TRUE,
			'#default_value' => $alunos->telefone,
	);
	field_attach_form('alunos', $alunos, $form, $form_state);
	$form['submit'] = array(
			'#type' => 'submit',
			'#value' => t('Atualizar'),
	);
	return $form;
}

/**
 * Método que valida os dados fornecidos nos campos do formulário de edição de alunos.
 */
function alunos_edit_form_validate($form, &$form_state) {
	$alunos_submisttion = $form_state['values']['alunos'];
	if(!preg_match("^(\d{3}.\d{3}.\d{3}-\d{2})|(\d{11})$^",$form_state['values']['cpf']))
		form_set_error('cpf','CPF inválido');
	if(!preg_match("^\(\d{2}\)\d{4}-\d{4}$^",$form_state['values']['telefone']))
		form_set_error('telefone','Telefone inválido');
	field_attach_form_validate('alunos', $alunos_submisttion, $form, $form_state);
	field_attach_form_validate('alunos', $alunos_submisttion, $form, $form_state);
}

/**
 * Método que define uma instância da entidade alunos preenchendo com os valores dos campos
 * do formulário de edição e atualiza o aluno cadastrado de acordo com o id passado como parâmetro.
 */
function alunos_edit_form_submit($form, &$form_state) {
	$alunos = $form_state['values']['alunos'];
	$alunos->cpf = $form_state['values']['cpf'];
	$alunos->nome = $form_state['values']['nome'];
	$alunos->campus = $form_state['values']['campus'];
	$alunos->curso=$form_state['values']['curso'];
	$alunos->cep= $form_state['values']['CEP'];
	$alunos->estado= $form_state['values']['estado'];
	$alunos->endereco = $form_state['values']['endereco'];
	$alunos->telefone = $form_state['values']['telefone'];
	field_attach_submit('alunos', $alunos, $form, $form_state);
	$entries = alunos_load_multiple();
	foreach ($entries as $entry) {
		if ($entry->id==$alunos->id){
			$entity2 = array(
					'id'=> $alunos->id,
					'cpf'=> $alunos->cpf,
					'nome'=>$alunos->nome,
					'campus'=>$alunos->campus,
					'curso'=>$alunos->curso,
					'cep'=>$alunos->cep,
					'endereco'=> $alunos->endereco,
					'estado' =>$alunos->estado,
					'telefone'=>$alunos->telefone,);
		}
		$aluno = alunos_entry_update($entity2);
		drupal_set_message('Cadastro do aluno atualizado com sucesso');
	}
	$form_state['redirect'] = "alunos/".$alunos->id;
}